﻿/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 /**
  * Note: The returned array must be malloced, assume caller calls free().
  */
//
//typedef struct LS
//{
//	int* arr;
//	int size;
//	int space;
//}LS;
//
//void InitLS(LS* p)
//{
//	p->arr == NULL;
//	p->size = p->space = 0;
//}
//
//void LSPush(LS* p, int x)
//{
//	if (p->size == p->space)
//	{
//		int new = p->space == 0 ? 1024 : 2 * p->space;
//		int* ptr = (int*)realloc(p->arr, new * sizeof(int));
//		p->arr = ptr;
//	}
//	p->arr[p->size++] = x;
//}
//
//void PrveTree(struct TreeNode* root, LS* p)
//{
//	if (root == NULL)
//		return;
//
//	LSPush(p, root->val);
//
//	PrveTree(root->left, p);
//	PrveTree(root->right, p);
//}
//
//int* preorderTraversal(struct TreeNode* root, int* returnSize) {
//	LS ls;
//	InitLS(&ls);
//	PrveTree(root, &ls);
//	*returnSize = ls.size;
//	return ls.arr;
//}

/*#include <iostream>
using namespace std;

int main()
{
	int a = 10;
	int b = 20;

	cout << a + b << endl;
	return 0;
}*/


//
//#pragma once
//#include <iostream>
//class Matrix
//{
//private:
//    int M[6];
//public:
//    Matrix()
//    {
//        for (int i = 0; i < 6; i++)
//        {
//            M[i] = 0;
//        }
//    }
//    friend Matrix operator + (const Matrix& m, const Matrix& n);
//    friend std::istream& operator >> (std::istream& is, Matrix& m);
//    friend std::ostream& operator << (std::ostream& os, Matrix& m);
//    Matrix& operator = (const Matrix& n);
//};
//Matrix operator + (const Matrix& m, const Matrix& n)
//{
//    Matrix temp;
//    for (int i = 0; i < 6; i++)
//    {
//        temp.M[i] = m.M[i] + n.M[i];
//    }
//    return temp;
//}
//Matrix& Matrix::operator = (const Matrix& n)
//{
//    for (int i = 0; i < 6; i++)
//    {
//        this->M[i] = n.M[i];
//    }
//    return *this;
//}
//std::istream& operator >> (std::istream& is, Matrix& m)
//{
//    for (int i = 0; i < 6; i++)
//    {
//        is >> m.M[i];
//    }
//    return is;
//}
//std::ostream& operator << (std::ostream& os, Matrix& m)
//{
//    for (int i = 0; i < 6; i++)
//    {
//        os << m.M[i] << " ";
//        if (i == 2)
//        {
//            os << std::endl;
//        }
//    }
//    return os;
//}
//
//using namespace std;
//
//
//int main()
//{
//   
//    //Matrix a, b, c;
//    //cin >> a >> b;
//    //c = a + b;
//
//
//    //cout << a + b;
//    return 0;
//}



//#include <iostream>
//#include <queue>
////#include <priority_queue>
//using namespace std;
//
//struct Sort
//{
//public:
//	bool operator()(const int a, const int b)
//	{
//		return a < b;
//	}
//};
//
//
//int main()
//{
//	priority_queue<int,vector<int>, Sort> pq; 
//	pq.push(12);
//	pq.push(6);
//	pq.push(87);
//
//	while (!pq.empty())
//	{
//		cout << pq.top() << " ";
//		pq.pop();
//	}
//
//	cout << "------------------------ " << endl;
//
//	vector<int> v = {13, 41, 7, 56, 17, 6};
//	sort(v.begin(), v.end(), Sort());
//
//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//	return 0;
//}







#include<iostream>
using namespace std;

class Date; // 前置声明
class Time
{
    friend class Date; // 声明日期类为时间类的友元类，则在日期类中就直接访问Time类中的私有成员变量
public:
    Time(int hour = 0)
        : _hour(hour)
    {
        cout << _hour << endl;
    }

private:
    int _hour;
};

class Date
{
public:
    //自定义类型，不使用初始化列表，就需要使用构造函数 + operator=
    Date(int day, int hour)
    {
        //函数体内初始化
        Time t(hour);//调用Time类的构造函数
        _t = t;

        _day = day;
    }

private:
    int _day;
    Time _t;
};


//int main()
//{
//    Date d(12, 12);
//    cout << 4 << endl;
//    return 0;
//}  





#include <stdio.h>
//原理：
//三角形的两条斜边上都是数字1，而其余的数都等于它肩上的两个数字相加
int main()
{
    int arr[10][10] = { 0 };
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; i < i; j++)
        {
            if (i == j || j == 0)//就是左斜边和右斜边上的数字都是1
            {
                arr[i][j] = 1;
            }
            else
            {
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
        }

    }
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < i; j++)
        {
            printf("%5d", arr[i][j]);
        }
        printf("\n");//打印完一行就换行打印
    }



    return 0;
}